package com.welson.db.cryptor.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Collections;
import java.util.List;

/**
 * @author welson
 */
@Data
@ConfigurationProperties(prefix = "db.cryptor")
public class DbCryptorProperties {
    /**
     * 是否启用加解密功能
     */
    private boolean enabled = true;

    /**
     * 加解密算法类型（SM4或AES）
     */
    private String algorithm = "SM4";

    /**
     * 加密模式（CBC、ECB、CTR等）
     */
    private String mode = "CBC";

    /**
     * 填充方式（PKCS5Padding、PKCS7Padding、NoPadding等）
     */
    private String padding = "PKCS7Padding";

    /**
     * 加密密钥
     */
    private String key;

    /**
     * 加密向量
     */
    private String iv;

    /**
     * 需要扫描的包路径列表
     */
    private List<String> scanPackages = new ArrayList<>();

    /**
     * 加密缓存配置
     */
    private CacheConfig encryptCache = new CacheConfig(100, -1);

    /**
     * 解密缓存配置
     */
    private CacheConfig decryptCache = new CacheConfig(1000000, -1);

    /**
     * 缓存配置
     */
    @Data
    public static class CacheConfig {
        /**
         * 缓存大小
         */
        private int size;

        /**
         * 缓存过期时间（分钟），-1表示永不过期
         */
        private int expireMinutes;

        public CacheConfig(int size, int expireMinutes) {
            this.size = size;
            this.expireMinutes = expireMinutes;
        }
    }
} 